import { getUser } from './../services/app.js'

const { routerRedux } = require('dva/router.js');   //非react-router标准，只在dva中有输出，
 /**
 * 用户信息本地存储，这能避免用户使用浏览器刷新页面是store信息丢失问题，这种处理方式具有普遍性，只与状态管理有关。
 *      第二点有兄弟使用sessionStorage，这没有本质差别；
 *      第三个问题如何设置cookies与服务端验证，这是目前比较流行的写法
 */
function getUserFromLocal() {
    try {
        let str = window.localStorage.getItem('yuntu-map-auth-user');
        if (str) {
            return JSON.parse(str);
        } else {
            return {
                name: 'guest',
                token:"token" //登录失败务必将次设置为null、""、0
            };
        }
    } catch (err) {       
        console.error('获取本地数据出错,'+err);
    }
}

export default {    
    namespace: 'app',    //vuex使用的而是namespaced:true,单词不要写错多一个“d”
    state: {
        name:'这是app的model',
        user:getUserFromLocal()
    },    
    subscriptions: {
        
    },    
    reducers: {
        setUser(state,{user}){          
            let newState = JSON.parse(JSON.stringify(state));            
            newState.user = user;            
            return newState;
        },
        removeUser(state){
            let newState = JSON.parse(JSON.stringify(state));            
            newState.user = null;            
            return newState;
        }
    },    
    effects: {
        *getUser(action,effects){               
            const response=yield effects.call(getUser,action.payload);
            const result=yield response.json();
            if(result.state){
                window.localStorage.setItem('yuntu-map-auth-user', JSON.stringify(result.data));
                console.log(result.data);
                yield effects.put({
                    type: 'setUser',
                    user: result.data,
                });    
                yield effects.put(routerRedux.push('/'));       //等价于window.location.href="/"    
            }else{                
                yield effects.put({
                    type:"setUser",
                    user:{
                        token:null
                    }
                })
            }
        },
        *logout(action,effects){
            //01 如果需要可以让action携带数据到服务端注销
            
            //02 删除本地localStorage
            window.localStorage.removeItem("yuntu-map-auth-user");

            //03触发 reducer，
            yield effects.put({
                type: 'removeUser'
            });

            //04 重新跳转路由回"/"或者"/login"应该都可以
            window.location.href="/"
        }
    }
};
